#pragma once
#include "CSetterBase.h"
#include "CValue.h"
class CDependencyPropertyProxy;

class CSetter :
	public CSetterBase
{

private: 
	CSetter(CCoreServices * pCore);
private: 
	virtual ~CSetter();
private: 
	HRESULT ResolveValue();
public: 
	virtual XUINT32 GetTypeIndex() const;
	static HRESULT Create(CDependencyObject * * ppObject, CREATEPARAMETERS * pCreate);
	HRESULT GetProperty(CDependencyPropertyProxy * * ppDependencyPropertyProxy);
	HRESULT GetProperty(XUINT32 * puiPropertyId, XBOOL * pbIsCore);
	HRESULT GetSetterValue(CValue * pValue);
	virtual HRESULT GetValue(CDependencyProperty * pdp, CValue * pValue);
	virtual HRESULT SetValue(CDependencyProperty * pdp, CValue * pValue);
	virtual XBOOL ParticipatesInManagedTreeInternal();
	CDependencyObject * m_pdoValue;
	CDependencyPropertyProxy * m_pDependencyPropertyProxy;
	CValue m_vValue;

	union
	{
		struct XPOINTF pointValue;
		struct XRECTF_WH rectValue;
		struct XRECTF_RB thicknessValue;
	} m_largeValues;

	XBOOL m_fValueResolved:1;
};